Skip to content

Conversation

RubenVerborgh
Copy link
Contributor

@RubenVerborgh RubenVerborgh commented Mar 23, 2018

Addresses the node-solid-server part of #571.

oidc-auth-manager still loses the URL we send, so fixes on that side are needed to fully solve #571. Tracking that in nodeSolidServer/oidc-auth-manager#17.

</div>
<div class="container">
<form method="post" action="/api/auth/select-provider">
<form method="post">
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Always POST to self, so we don't lose query string.

<label for="webid">WebID or server URL:</label>
<input type="text" class="form-control" name="webid" id="webid"
value="{{serverUri}}" />
<input type="hidden" name="returnToUrl" id="returnToUrl" value="" />
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one was always empty, so rather pointless. Instead, the query string should be used.

'/api/auth/select-provider?returnToUrl=' + currentUrl
const locals = req.app.locals
const currentUrl = util.fullUrlForReq(req)
const loginUrl = `${locals.host.serverUri}/api/auth/select-provider?returnToUrl=${encodeURIComponent(currentUrl)}`
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Escaping was definitely important here (for query strings and such).

<meta charset="UTF-8">
<script>
window.location.href = "${url}" + window.location.hash
window.location.href = "${url}" + encodeURIComponent(window.location.hash)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So it is the client who appends the hash (and only the client can do that).

res.header('Content-Type', 'text/html')

let currentUrl = util.fullUrlForReq(req)
req.session.returnToUrl = currentUrl
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can't rely on session, because the server cannot see the hash.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This fixed mechanism (not relying on session) will still work on direct requests by the browser (like, requesting an image or a pdf file or whatever), not mediated by a client?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we end up in this code, we are in the process of rendering an HTML error page. So if that's the behavior we exhibit in response to a browser directly requesting an image (I hope not), it's broken for another reason already 😄

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh, I see. Makes sense.

Copy link
Contributor

@dmitrizagidulin dmitrizagidulin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Addresses the node-solid-server part of #571.
@RubenVerborgh RubenVerborgh changed the base branch from master to develop May 4, 2018 19:49
@RubenVerborgh
Copy link
Contributor Author

@timbl e7be5dd adds a temporary solution to preserve the full return URL (with hash) when logging in with WebID-TLS. Could you test fix/redirect-hash branch on timbl.com?

Copy link
Contributor

@timbl timbl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works for me on timbl.com
Looks reasonable
An important fix!!

@RubenVerborgh RubenVerborgh merged commit 4cfd5a3 into develop May 4, 2018
@RubenVerborgh RubenVerborgh deleted the fix/redirect-hash branch May 4, 2018 22:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants